package ar.edu.utn.frsf.tpae.a2013.g03.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.dao.CentroCostoDao;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.dao.EmpleadoDao;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.dao.GastoDao;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.dao.SolicitudGastoDao;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.dao.SupervisorDao;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.CentroCosto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Empleado;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Gasto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.SolicitudGasto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Supervisor;
import ar.edu.utn.frsf.tpae.a2013.g03.service.EmpleadoService;

public class EmpleadoServiceImpl implements EmpleadoService {

	private EmpleadoDao empleadoDao;
	private SolicitudGastoDao solicitudDao;
	private GastoDao gastoDao;
	private SupervisorDao supervisorDao;
	private CentroCostoDao centroCostoDao;
	
	// Setter utilizado por Spring.
	  @Autowired(required = true)
	  public void setEmpleadoDao(EmpleadoDao empleadoDao) {
	    this.empleadoDao = empleadoDao;
	  }
	  
		// Setter utilizado por Spring.
	  @Autowired(required = true)
	  public void setEmpleadoDao(SolicitudGastoDao solicitudDao) {
	    this.solicitudDao = solicitudDao;
	  }
	  
		// Setter utilizado por Spring.
	  @Autowired(required = true)
	  public void setGastoDao(GastoDao gastoDao) {
	    this.gastoDao = gastoDao;
	  }
	  
	// Setter utilizado por Spring.
		  @Autowired(required = true)
		  public void setCentroCostoDao(CentroCostoDao centroCostoDao) {
		    this.centroCostoDao = centroCostoDao;
		  }
		  
		// Setter utilizado por Spring.
		  @Autowired(required = true)
		  public void setSupervisorDao(SupervisorDao supervisorDao) {
		    this.supervisorDao = supervisorDao;
		  }

	@Override
	public Empleado iniciarSesion(String user, String pass) {
		Empleado empleado = empleadoDao.buscarPorUsuario(user);
		if(empleado != null)
			if(empleado.getContrasenia().equals(pass) && empleado.getUsuario().equals(user))
				return empleado;
		
		return null;
	}

	@Override
	public void crearSolicitud(SolicitudGasto solicitud, String empleado, String supervisor, String centro) {
		Empleado emp = empleadoDao.buscarPorUsuario(empleado);
		Supervisor sup = supervisorDao.buscarPorUsuario(supervisor);
		CentroCosto cc = centroCostoDao.buscarPorNombre(centro);
		
		solicitud.setEmpleado(emp);
		solicitud.setCentroCosto(cc);
		solicitud.setSupervisor(sup);
		
		solicitudDao.persistir(solicitud);
	}
	
	@Override
	public void crearSolicitud(SolicitudGasto solicitud) {
		solicitudDao.persistir(solicitud);
	}

	@Override
	public void eliminarSolicitud(SolicitudGasto solicitud) {
		// TODO Auto-generated method stub

	}

	@Override
	public List<SolicitudGasto> listarSolicitudes(String usuarioEmpleado, String estado) {
		Empleado empleado;
		empleado = empleadoDao.buscarPorUsuario(usuarioEmpleado);
		List<SolicitudGasto> solicitudes = solicitudDao.listarPorEmpleadoYEstado(empleado, estado);
		return solicitudes;
	}
	
	@Override
	public List<SolicitudGasto> listarSolicitudes(Empleado empleado, String estado) {
		List<SolicitudGasto> solicitudes = solicitudDao.listarPorEmpleadoYEstado(empleado, estado);
		return solicitudes;
	}

	@Override
	public void agregarGasto(Gasto gasto, Integer solicitudId) {
		SolicitudGasto slg = solicitudDao.buscarPorId(solicitudId);
		
		gasto.setSolicitudGasto(slg);
		
		gastoDao.persistir(gasto);
	}
	
	@Override
	public void agregarGasto(Gasto gasto) {
		gastoDao.persistir(gasto);
	}

	@Override
	public void eliminarGasto(Gasto gasto) {
		// TODO Auto-generated method stub

	}
	
	@Override
	public List<Gasto> listarGasto(){
		return gastoDao.listar();		
	}
	
	@Override
	public List<CentroCosto> listarCentrosCosto(){
		return centroCostoDao.listar();		
	}
	

}
